{
 "metadata": {
  "name": "",
  "signature": "sha256:e893318b0b19c851f2be76b70e7549a644e169436ae807fc16dcfc2b07f77aa2"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from __future__ import print_function, division\n",
      "import pandas as pd\n",
      "import numpy as np\n",
      "from copy import deepcopy\n",
      "from os.path import join, isdir, isfile, dirname, abspath\n",
      "from os import listdir, getcwd\n",
      "import re\n",
      "from sys import stdout, getfilesystemencoding\n",
      "from nilmtk.datastore import Key\n",
      "from nilmtk.timeframe import TimeFrame\n",
      "from nilmtk.measurement import LEVEL_NAMES\n",
      "from nilm_metadata import convert_yaml_to_hdf5\n",
      "from inspect import currentframe, getfile, getsourcefile\n",
      "from copy import copy"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import matplotlib.pyplot as plt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from nilmtk import DataSet, TimeFrame\n",
      "from nilmtk.disaggregate import CombinatorialOptimisation"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "train = DataSet(\"/home/nipun/Desktop/redd.h5\")\n",
      "test = copy(train)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec = train.buildings[2].elec"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 5
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "building_2 = train.buildings[2]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.map_meter_instances_to_appliance_ids()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 7,
       "text": [
        "{1: [],\n",
        " 2: [],\n",
        " 3: [Appliance(type='sockets', instance=1)],\n",
        " 4: [Appliance(type='light', instance=1)],\n",
        " 5: [Appliance(type='electric stove', instance=1)],\n",
        " 6: [Appliance(type='microwave', instance=1)],\n",
        " 7: [Appliance(type='washer dryer', instance=1)],\n",
        " 8: [Appliance(type='sockets', instance=2)],\n",
        " 9: [Appliance(type='fridge', instance=1)],\n",
        " 10: [Appliance(type='dish washer', instance=1)],\n",
        " 11: [Appliance(type='waste disposal unit', instance=1)]}"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Finding top-k appliances for training"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "top_k = elec.select_top_k(k=6)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 25
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "top_k"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 26,
       "text": [
        "MeterGroup(meters=\n",
        "  ElecMeter(instance=3, building=2, dataset='REDD', appliances=[Appliance(type='sockets', instance=1)])\n",
        "  ElecMeter(instance=4, building=2, dataset='REDD', appliances=[Appliance(type='light', instance=1)])\n",
        "  ElecMeter(instance=6, building=2, dataset='REDD', appliances=[Appliance(type='microwave', instance=1)])\n",
        "  ElecMeter(instance=8, building=2, dataset='REDD', appliances=[Appliance(type='sockets', instance=2)])\n",
        "  ElecMeter(instance=9, building=2, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])\n",
        "  ElecMeter(instance=10, building=2, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])\n",
        ")"
       ]
      }
     ],
     "prompt_number": 26
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.energy_per_meter().T"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
        "<table border=\"1\" class=\"dataframe\">\n",
        "  <thead>\n",
        "    <tr style=\"text-align: right;\">\n",
        "      <th></th>\n",
        "      <th>active</th>\n",
        "      <th>apparent</th>\n",
        "    </tr>\n",
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
        "      <th>1 </th>\n",
        "      <td>       NaN</td>\n",
        "      <td> 14.358204</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2 </th>\n",
        "      <td>       NaN</td>\n",
        "      <td> 62.864776</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3 </th>\n",
        "      <td>  2.066441</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4 </th>\n",
        "      <td>  8.886603</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>5 </th>\n",
        "      <td>  0.483484</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>6 </th>\n",
        "      <td>  5.141312</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>7 </th>\n",
        "      <td>  0.714265</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>8 </th>\n",
        "      <td>  3.431987</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>9 </th>\n",
        "      <td> 26.634318</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>10</th>\n",
        "      <td>  2.992981</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>11</th>\n",
        "      <td>  0.026742</td>\n",
        "      <td>       NaN</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
        "</div>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 27,
       "text": [
        "       active   apparent\n",
        "1         NaN  14.358204\n",
        "2         NaN  62.864776\n",
        "3    2.066441        NaN\n",
        "4    8.886603        NaN\n",
        "5    0.483484        NaN\n",
        "6    5.141312        NaN\n",
        "7    0.714265        NaN\n",
        "8    3.431987        NaN\n",
        "9   26.634318        NaN\n",
        "10   2.992981        NaN\n",
        "11   0.026742        NaN"
       ]
      }
     ],
     "prompt_number": 27
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "split_point = elec.train_test_split(0.5)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 28
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "split_point"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 29,
       "text": [
        "Timestamp('2011-04-25 03:22:04-0400', tz='US/Eastern')"
       ]
      }
     ],
     "prompt_number": 29
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.good_sections()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 30,
       "text": [
        "[TimeFrame(start='2011-04-17 19:18:27-04:00', end='2011-04-17 19:22:04-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 19:25:09-04:00', end='2011-04-17 19:26:14-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 21:45:01-04:00', end='2011-04-17 21:45:25-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 22:18:13-04:00', end='2011-04-17 22:18:26-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 23:09:35-04:00', end='2011-04-17 23:09:43-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 23:15:29-04:00', end='2011-04-17 23:15:37-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 23:30:57-04:00', end='2011-04-17 23:31:21-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-17 23:42:54-04:00', end='2011-04-17 23:43:03-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-18 00:00:53-04:00', end='2011-04-18 00:01:02-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-18 00:09:34-04:00', end='2011-04-18 01:21:53-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-18 01:22:41-04:00', end='2011-04-18 01:29:10-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-18 01:31:36-04:00', end='2011-04-19 12:13:37-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-19 12:14:16-04:00', end='2011-04-19 18:45:17-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-19 20:20:07-04:00', end='2011-04-21 17:45:11-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-21 19:41:34-04:00', end='2011-04-22 02:08:11-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-22 02:11:36-04:00', end='2011-04-22 22:47:03-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-22 22:48:39-04:00', end='2011-04-23 12:23:17-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-23 12:24:06-04:00', end='2011-04-23 13:36:09-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-23 13:36:50-04:00', end='2011-04-23 17:02:16-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-23 17:04:59-04:00', end='2011-04-24 20:46:50-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-24 20:47:30-04:00', end='2011-04-25 19:27:17-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-25 19:32:14-04:00', end='2011-04-27 03:17:55-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-27 03:21:47-04:00', end='2011-04-29 17:48:41-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-29 17:48:42-04:00', end='2011-05-01 01:03:59-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-01 01:06:15-04:00', end='2011-05-01 23:04:44-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-22 15:57:03-04:00', end='2011-05-22 19:59:16-04:00', empty=False)]"
       ]
      }
     ],
     "prompt_number": 30
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "train.store.window = TimeFrame(start=None, end = split_point)\n",
      "test.store.window = TimeFrame(start=split_point, end=None)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 31
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from nilmtk import DataSet, TimeFrame\n",
      "from nilmtk.disaggregate import CombinatorialOptimisation"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 32
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "co = CombinatorialOptimisation()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 33
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "co.train(top_k)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 34
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "co.model"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 35,
       "text": [
        "{3: array([  0,  14, 777], dtype=int32),\n",
        " 4: array([  0,  20, 155], dtype=int32),\n",
        " 6: array([   0,   49, 1826], dtype=int32),\n",
        " 8: array([   0,  191, 1054], dtype=int32),\n",
        " 9: array([  0, 163, 410], dtype=int32),\n",
        " 10: array([   0,  208, 1199], dtype=int32)}"
       ]
      }
     ],
     "prompt_number": 35
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from nilmtk import HDFDataStore\n",
      "output = HDFDataStore('output.h5', 'w')\n",
      "test_mains = test.buildings[2].elec.mains()\n",
      "co.disaggregate(test_mains, output)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 36
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "output.store.keys()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 37,
       "text": [
        "['/building2/elec/meter10',\n",
        " '/building2/elec/meter1_2',\n",
        " '/building2/elec/meter3',\n",
        " '/building2/elec/meter4',\n",
        " '/building2/elec/meter6',\n",
        " '/building2/elec/meter8',\n",
        " '/building2/elec/meter9']"
       ]
      }
     ],
     "prompt_number": 37
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%matplotlib inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 38
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax = plt.subplots(nrows=2, sharex=True)\n",
      "output.store['/building2/elec/meter9'][:'May 3 2011'].plot(label='Predicted', ax=ax[0])\n",
      "train.buildings[2].elec['fridge'].power_series_all_data()[:'May 3 2011'].plot(ax=ax[1])\n",
      "plt.legend()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 39,
       "text": [
        "<matplotlib.legend.Legend at 0x7f7c6e114a90>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEJCAYAAABxIVf8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmcFMXZgJ9dWE4XWQQFBBaFoGiiIPFEZb2jUZSoeKPR\nTzQm3jdEQQlivEBJNBoRj6CieMRAwIMweCEol4IghywghyA3crP1/fFOTXfP9Nw90z1DPb/f7HZ1\n1/V2VVdXv3W8YDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgSJNawHTgP2F3f+CH\n8LnpwJk2v/cC84G5wOn5y6LBYDAYMuU2YATwXtjdL3wumkOAGUAZ0BZYAJTmIX8Gg8GwR5NNQ9sK\nOAt4HigJnyuxHds5F3gN2AlUI438UVmkbTAYDIYUyKaRHwzcCdTYzingRmAmMAxoHD7fElHjaH4A\n9s8ibYPBYDCkQKaN/NnAKkTvbu+5PwMcAHQCVgCPJ4hDRZ9o166dCp83P/MzP/Mzv9R/M4hDpo38\ncUB3YBGihjkZeBlp+HWiz2OpZJYBrW3hW4XPOVi4cCFKqcD/+vXr53sejAzFI4eRIRi/QpYBONzr\nRr5PuNE+ALgY+B/QC2hh89MD+CZ8/F7YX51wmF8AUzJM22AwGAwpUtuDOEqQnjvAI8gbRSG9/OvC\n578F3gj/3wXcYAtTcFRXV/udhawpBhmgOOQwMgSDYpDBDS8a+VD4B3BFAn8PhX8FT6dOnfzOQtYU\ngwxQHHIYGYJBMcjghtt0Rz9RYf2SwWAwGFKkpKQE4rTn2fbkawFfIVMizwGaACOBSmQ+fE9gfdjv\nvcDVwG7gJuCDLNM2ZEmTJk1Yt26d39kwFCEVFRWsXbvW72wYyH7V6c2Inl13v+8BPgQ6AOPDbpAV\nrxeF//8GeNqDtH0jFAr5nYWsCYVCrFu3zvdZAeZXnL9C7DwUw3PthtcrXrsDL4WPXwLOCx9ntOL1\nu++gpCT+b8GC2DB33gm9e6cuhI7r17+Gm26S41/+Uv7feqt1fe1amDNHjr//PvX4E7HffhLfRx/J\n/9NtO/pEy3rLLdaxneOOc55fvdoZ7qyz0rsfBoOfLF8e/3k/4AD4IM73/wsvwJ/+JMf9+1thWrWC\niy+23A8/LH7uuEPcK1eKe/58OOkkOf7oI6iszFyGceMk7gkT3K+XlECfPu7Pczz/2l9pKcydm3ne\n0uVNoDPQDWuDMvvru8TmHgpcZrv2PHC+S5zKzttvKwXxf6NHqxgaNJBrqZIofvtv7lyl3nhDjv/1\nr9TjTyXt+++3jlPJV7z8K6XUjBnJw1hh07hRBkMaZFq3Pv88cd3v08c93FFHWfW8fv344du10/mT\n31dfifu996zwf/5zem1INHfdJeEffND9OihVUpL42Yz2r/2BtIuxfuLPVvR6xaujwU6UcJJrBoPB\nYPCATAde9YrXs4B6QCPgFeBHoDmwElkYtSrsP6UVrwBXXXUVbdu2BWDx4sbIDglV4auh8H9xf/11\niIYNoapK3KFQiJoa67rWsdmvu7njxR/tnjVL3N9+K+dSjT+eW8evlOUOhWKvx8tPdP5DoVBYhZXY\nf1VVVdHqHw3BIZPnY/ZsSPQ8Ll5sud2eJzkVP/zWrU73V19Bly7aPYRQyGpvMn2+dfhFi5zPc7L2\nJll82q2UPL8vvvgiQKS9zCV2dc0jwN3h43uAsAYsstWwXvG6EPcvAMcnyFtvJf50+89/Yj9bGjbM\nnbpm5Ej9yTgh9QRSSPu++/KvrpkwYUJRqGtKSkrU7bffHnE/+uijqn///jlNs7KyUp1//vkR95tv\nvqmuuuqqnKZZaGRatyZNyq+65ssvxS3qmglKqezVNXffnVt1zVtvufnxXl0T0ziH/z8MnAbMQ/az\n0Y28fcXrWHK44jWVgYxMULbcHnJIVW4SySNW76ewqVOnDu+88w5r1qwBIvOFc860adOYM2dOXtPc\nE1BJWoVk17OLvyq7yNNIK1s50sGLRn4ioroBWAucikyhPB1rjjzIatf2wMHA+x6km9cbVSjsafek\nrKyM3r17M3jw4Jhr1dXVnHzyyRx++OGceuqpLF26FBCV4M0330zXrl1p164db731ViTMo48+ylFH\nHcXhhx9O//79XdMsKSnh9ttvZ+DAgQAo201fu3Yt5513HocffjjHHnss33wj2zf179+fq6++mpNO\nOol27doxdOjQSJh//etfHH300XTu3Jnrr7+empoaDAavKNi56vHIR6fq229DuU8kxxSTTv6GG25g\nxIgRbNy40XH+xhtv5Pe//z0zZ87ksssu46abbopcW7lyJZ999hmjR4/mnntkOccHH3zAggULmDJl\nCtOnT2fq1Kl88sknrmleeOGFTJs2jYULFzrO9+vXjy5dujBz5kweeughevXqFbk2b948PvjgA6ZM\nmcIDDzzA7t27mTNnDm+88Qaff/4506dPp7S0lBEjRnh1awoOfz+KQp7EErQPOy/2rvGNYum1Fosc\nflFeXk6vXr146qmnqF+/fuT8F198wbvvvgvA5Zdfzl133QVIT/y882QJR8eOHfnxxx8BaeQ/+OAD\nOnfuDMDPP//MggULOOGEE2LSrFWrFnfeeSeDBg3izDMtU8afffYZb7/9NgAnnXQSa9asYdOmTZSU\nlPDb3/6WsrIy9tlnH/bdd19WrlzJ+PHjmTp1Kr/+9a8B2Lp1K82bN/f6FhnSIGiNdDTpthfZNPL1\nEFVNXWRA9d/I1gX9gf8DVof99UH08JDm1gZBbfyMTj543HLLLRxxxBH8/ve/d5xXcSpRnTp1XP3c\ne++99E5h9VhJSQlXXHEFgwYN4pe//GXaadaqVYtdu3YBcOWVV/LQQ0Wxd1/OyW2bUJXLyH0jG3XN\nNuAkZI7jYeHj45EB1SeQhVKdsRr4vGxtkMu3cFBfOnaC3gvJFRUVFfTs2ZNhw4ZFBkKPO+44Xn/9\ndQBGjBjBiSeemDCOM844gxdeeIGff/4ZgGXLlrF6tfRVTjnlFFasWOHwX7t2bW699VaeeOKJSJon\nnHBCRN0SCoVo1qwZ5eXlrg1/SUkJp5xyCqNGjYqks3btWpYsWZLpbTAYYsi2kd0S/l8H2axMr3At\namPeQdbJp/oiKhadvH1my+23385PP/0UcQ8dOpThw4dz+OGHM2LECJ588knXcPr4tNNO49JLL+XY\nY4/lsMMO48ILL2Tz5s3U1NSwcOFCmjRpEhP2mmuuYffu3RF3//79mTp1Kocffjh9+vThpZdeioRx\nm4XTsWNH/vKXv3D66adz+OGHc/rpp7NSr7U35JmQ3xlIiXyqa0BeEtOAdoh919nABYgx717IDpW3\nI7NsWgJf2MIWnDHvPbWXHGTsg6377rtvpBcO0KZNG8aPHx8TZvjw4XHjuOmmmxwDtACzZ8/mggsu\noG7dugB8b9u8qE6dOixbZq3rq6io4J133olJs1+/fg63nnUD0LNnT3r27OkuoMGB189gIXydZ0u2\njXwNoq7ZG5kWWYU09g+Grw9AjHlfEyd8zC22r3itrk684vWbb0I0auRcISadKssN3q941Tp5r1a8\n2tPL14rXYtPJ55JDDz2Uxx57zO9sFByZPB96NXk4hvB/y+31itepU+HII7Vbx5l6ft3cJSXiztWK\nV73aPp8rXjX3AXdEnWuLZef1HqythwHGAUdH+Xes4ho1KvHqt3ffjV35tffeuVnxOmeOUq+/Lsde\nb1DWt693K16nT09txauELfwVr4ZgkmndSrbi9Z573MOluuL1wAN1/uQ3ZYq47RuU6RXomXLvvRL+\ngQfcr6fybLr518dvvunmJzcrXpsCjcPH9ZGVrtORvWs0WRnzzuRTKh8rXoOsk0+VYtHJGwzpkLhN\nCQHetSFBUQVlo65pgewZXxr+vYIYCnkZ0bEoisyYd1AKzWAoVoIw7pXtcx4EGexk08h/Axzhcr6X\nyzmNp8a8/Wp0gzxPPtV7YnTyBkM0VX5nICXSbffMtgYBidtgMOQftwaz2J7zbBr5esBkZAvhb4FB\n4fNNEDuv85AVrY1tYe4F5gNzkQ3MCgpdIYxO3mDwh9x+vYdyGblv5GLFa96MeReLjtxLOYqtF3Lv\nvfc6FjEZgsMFF1zAuHHj/M5GVhTb8+JGLla8embMO0iza+wEWSefKoWgk1+9ejWvvPIK119/vd9Z\n2ePp378/V1xxhePc3XffzZ///GefcuQNuo2R/1U+5iR3ZNvIlyLqmh+BCciK1/3CbsL/9wsft0RW\nuWoKbsVrIVAsXzcAL774Ir/97W8jK02Dht5grBDIRV6PPPJINm7cyNSpUz2LM1knrRB63rnOY74H\nXvWK11bAiYjKxpEfEk+TdF3x2r9/f/r378+YMUNw6slCDvesWSGHbjkUCrFrl9MdfT3anSj+aLfo\n4kMRnXwq8Sdyu6WX7LrdHZ3/UCjEV18l9q/jLwSd/Lhx4+jWrVvEHQqFaNWqFYMGDaJZs2YccMAB\nvPrqq5HrGzZsoFevXuy77760bduWgQMHRjYGq6ysZNq0aYBsVlZaWhqx7DRs2DB69OgBQE1NDQ8/\n/DDt27enadOmXHTRRaxbJ1syVVdXU1paygsvvEBlZSWnnnpqUhmmTJnCscceS0VFBS1btuTGG29k\n586dkeulpaUMHTqUdu3a0axZM+66665Inl988UW6du3KjTfeSOPGjenYsSP/+9//ImGHDx/OIYcc\nQqNGjWjXrh3PPfdczL165JFHaNGiBddccw1KqaSyvfzyy1RWVtKsWbPIzpjjxo1j0KBBjBw5kvLy\n8shWzCBfhGPGjHGVPZPnI1H9lRWv8cOn8vxs3ep0T50qbmmYh2T1PEe7ZcVr4vzGez7jubX/UCjE\nVVddFWkv84Ve8ToXa0FUi7AbMljxqm2qxvu9/Xbsyq999snNitdvv1Xqtdfk2Gsbr336eLfiddq0\n1Fa8FoKN12bNmqmvvvoq4p4wYYKqXbu2uv3229WOHTvUxIkTVcOGDdV3332nlFLqiiuuUOedd57a\nvHmzqq6uVh06dFDDhg1TSinVq1cv9fjjjyullLr22mtV+/bt1TPPPBMJN2TIEKWUUkOGDFHHHnus\nWrZsmdqxY4e67rrr1CWXXKKUUmrRokWqpKREXXnllWrLli1q27ZtSWWYOnWqmjx5stq9e7eqrq5W\nHTt2jKSllNioPfnkk9W6devUkiVLVIcOHdTzzz+vlFJq+PDhqnbt2mrIkCFq165dauTIkWrvvfdW\na9euVUopNWbMGPX9998rpZSaOHGiatCggZo2bZrjXt1zzz1qx44dauvWrSnJ1rt3b7Vt2zY1c+ZM\nVbduXTV37lyllFL9+/dXV1xxRYx8TzzxhPrd734Xcz7TuvXFF4nr/t13u4dLdcXrAQfo/Mlv8mRx\n22283n9/dite9Qr2eKaGs13xOnKkm5/crDmKXvH6MXAK2RnzdmRcbyMQ7+dm0DZXjfzs2VYj7/W2\nBnoZdD4beQmb/Ealen9SzW86lJWVRRpwpayGa8uWLZFzPXv2VAMGDFC7du1SderUUXPmzIlce/bZ\nZ1VVVZVSSqlhw4ap7t27K6WU6tixoxo2bJi6+OKLlVJimHv69OmRa+PHj4/EsXz5clVWVqZ2794d\naQgXLVqUsUyDBw9WPXr0iLhLSkrU+++/H3E//fTT6pRTTlFKSSPfsmVLR/ijjjpKvfLKK65xn3fe\neerJJ59USsm9qlOnjtq+fXvkeiqyLVu2zJHWyHCL0q9fP3X55ZfHpPncc8+pk08+OeZ8po385Mm5\nbeTbttX5c2vkVVjW7OqtNgQelEY+FytepyMrW69BBlj19np5WfG6p+8n7zV+ylxRUcGmTZtiztmt\nP1VWVrJixQrWrFnDzp07qaysjFxr06ZNZIfIE088kTvuuIOVK1eye/duLrzwQvr378/ixYvZsGED\nnTp1AkRt0aNHD0pLLU1m7dq1I9ajAFq3bp2yDPPmzeO2225j6tSpbNmyhV27dkWsQLnF16ZNG5Yv\nXx5x77+/c9hKywswduxYHnjgAebPn09NTQ1btmzhsMMOi/ht1qyZw1BJKrLZrVI1aNCAzZs3J5Rv\n06ZNNG7cOKEfg79ko5PXK171FMpHw+c9M+Yd1EbVzJPPD4cddhjfffed49y6devYsmVLxL148WJa\ntmxJ06ZNKSsro7q6OnJtyZIltGrVCoD27dvToEEDhg4dSrdu3SgvL6d58+Y899xzDvN+bdq0Ydy4\ncaxbty7y27JlCy1atIj4cdsXPh5/+MMfOOSQQ1iwYAEbNmxg4MCBMYa67UZClixZ4mjY7dsY2+Xd\nvn07559/PnfddRerVq1i3bp1nHXWWSjbQxOdz1Rki0c8mefMmRN5QRYizjYmlMO4/SPQK16T3SS3\n64Uw+m5IjbPOOouJEyfGnO/Xrx87d+7kk08+YcyYMVx44YWUlpbSs2dP+vbty+bNm1m8eDGDBw/m\n8ssvj4Tr1q0bf/vb3yKDuVVVVQ43wPXXX0+fPn0iDe/q1at57733Euazbdu2vPzyy67XNm/eTHl5\nOQ0aNGDu3Lk888wzMX4ee+wx1q9fz9KlS3nqqae46KKLItdWrVrFU089xc6dO3nzzTeZO3cuZ511\nFjt27GDHjh00bdqU0tJSxo4dywcfJLSmmZFsmubNm1NdXe14iQB8/PHHDhu3uSYoDaefpHsPsmnk\nW2NNm5yF2GwFsfH6A6K2mQ7Ya0DBrni1vzzMPPn80KtXL/773/+ybdu2yLnmzZtHZqpcccUVPPvs\ns3To0AEQS1ANGzbkwAMP5IQTTuCyyy5z2Hzt1q0bmzdvjpgBjHYD3HzzzXTv3p3TTz+dRo0aceyx\nxzJlirVZanSPdseOHaxdu5ZjjjnGVYbHHnuMV199lUaNGtG7d28uvvjimDjOPfdcunTpQufOnTn7\n7LO55hrL/MLRRx/N/PnzadasGffddx9vvfUWFRUVlJeX89RTT9GzZ0+aNGnCa6+9xrnnnuuINzqd\ndGWzc+GFFwKwzz77RNRNX375JeXl5THqpyATLaLTXZXTtAqR5oiqBmAv4DugI9APuM3Fvx54LUP2\nmV9A7EvGMZgwYkTiQZhRo2IHIJo1y93A66uv7nkDr37Tp0+fyGyUCRMmqFatWvmcIyeffvqpuvTS\nSzMOX1JSohYuXOh6bfjw4er444/POO5cc/7556uxY8e6Xsu0biUbeL3rLvdwmQ68fvGFuHMx8Nqv\nn/v1bAdeX3/dzU9uBl5Xhn8Am4E5WIub0rHx+oWLXyCzT7N8vD1FJ1/lWXx+fIIWgk4eYODAgX5n\nISFdu3ala9eufmfDF0aNGuV5nP72fkN48VwX22IoTVugM1aDfSMwExiGNc2y4Fe8Gn2g/6Qz6FkI\nJJInnvHvYsY8Y96TrY1XEFXNKOBmpEfvmY3XBQsS23idNSvEPvs4bSLu2GFdj2czMVMbr3pWTZBt\nvM6fn9x/odp4raqqcsxEKQZ2i1FiV6688kquvPLKPObGWzJ5PmQRcpWOIfzfckvxu4fXz0+6Nl6P\nPlq7dZyp59fNrcNXVzuf52TtTbL4tLukpIpQKH82XsuQqZC3xLnelixsvL78cmL9nJutw/32y41O\nftYsa4zAa538Pfd4p5OfOrW4dPKGwiTTujVlSm518pWVOn/xdfL9+2enk9crZnOlk3/tNTc/ubHx\nWoKoY74FhtjO2yfdZmXjNaiYefIGQzESAopPZZSNuqYrcDnwNTJVEqAPcAke2XhNdrOLpTCKRQ6D\nodAoxGcv3Txn08h/ivuXwNgEYR4iDRuvQZ1dUyzz5CsqKva4gT1DfqioqMhJvLltlKsAv2f4eE+g\nV7wmw63Ac1VAJSWF8dZPR/61a9eilMrqB/F/bn7r1k0t3sGDnXEtXSr/Bw/OLr/xfnfeKfGPGmWl\nOXlyfJmqqtxl9OoHioMPzu7+g+K005KHSRT32LHW8SmnWMePPpo4X2vXrs2sAueYxIuhipNcrHj1\nzMZrkNQ19rSCrJNP9Z4Umk5eyxUtXy7lyFf9KrSycKNQZIguU6c7lNO0/CKbRn4ncCtwKHAM8Edk\nxWvebLzmmz3hrZ9rUr2H+b7XxVq2hSaXX/n1skEO2j3PppFdiWxTAM4Vr8bGawFQaPPk49WFQpPD\nDSNDUKjyNLagNPZer3idjIc2XoPyuaPJVX6CJmeQMfcqGASlAfOKXMgTlPbCqxWvbyErXjdFXUs4\nSd/tmn3F65w5iVe8zp4du6Js+3breq5WvH77rZwL4orXefOS+6+qqnLoUDPNf7or+CCELPBMLX57\nfFKxQyxY4Aw/Y8YMbrnllqzyb09v1iwrfm3/M1H5uK1oTP/+OctEX//559TiT1R/xYRrav7d7sfX\nX8NvfiPudeucK0pzUZ/EfEB8ebJd8SobmlruadPgmGO0ewihkNXeZFqeJSXiztWKV932+Lni1TMb\nr//8p0q4+s1t5df++6u0Vqslit/+++YbWekK3tt4vesu6ziVfMXLv1Kpr3idMMFbGVJJE5SqVy+1\neIcMcca1aJH8f+wxpz+v5NBl8NZbVpqTJsWX6aST0qtniXCTAZQ6+ODkYZPV2zPOSB4mUdx6k0lQ\nKmyVMKfl8OWXieW58073cKmueG3TxpIBlPr8c3Hbbbw+8EB2ZatXzN5/v/v1VO9/tH99PGKEm5/8\nrnh9D7gyfHwl8K7tvKcrXv36dA+yTj7Ve+KXDtXrgVev5PBT/VAM+uxiKAevdPJBU2V5veL1XsRw\nt282Xg3BJtWXULypbrnWcxqdv5N8349k6RVC+QQtj9n05PWK107IoGtnRAXjq43XXC6G0gR5nnyq\n8hfKvOZk5FKOfPXIiqEsCkWGxGUaylMu8kug56lH2TuOIWi9jKDFW0zsifcoaJ/9+aAYZC4moyEv\nIFMkv7Gd608R2ncF540Nsk4+VQpVDxxdwXMpR75eLIVaFnYKRYbEZVqVx7TyRzaN/HBk5aodBTyB\npb7Rm5Wltdp1+XJo0ACuvz5xBi67TN6av/kNtG0rxz+EZ+J37gy1asHw4eJ+6y048UTQNhqWLIHa\naYxIPPdc7LmxY+H99+Gee2DTJnjgAbjzTvkCWb4cBg+Gfv3E74ABcO21VtiLLrKOH33UOj7xROjV\nK3l+BgyQdO3MnQtdurj7f/hhWLAAnngCli2zzk+YAGPGJE8vmjFj4H//S+znm29iz5WUwK5dsXm3\ns3Ur3H+/85x+YN5+G8aNs87ffbcV386dcm7DBrk/8di1S8ItWyb346ef4JFH5NoFFySWKZr3bUrH\nl1+GmTMlzuXLpX4++6xce+QRWLXK8qvrzJ//HBvn88/L/zlzRN6tW+Guu6Bv3/TypvO3fr1VD8eP\nTx7mscdg4UI5njbNGVaX2wcfQN26Vl5B/G3eLMcrV0o8778PduuIzz5L2LAN3Hcf/PGP8P33Ul6D\nBqUu11tvOePV9shvuIGwYRB3liyBF16w3McdR3jaZiw1NVI+Y8dKfX/3Xcmn/XkpKYE77nCGE8NF\n8MknsXGOddm+cdAgq/1YvVqeVZB72b+/5W/IkNiwW7e61yEvaYuzJ98PuN3F373A3Tb3OGQrhGiU\nUko99FDqUxtT+dmnIa1ZI+5rrkk/nugplPZr//2vdbxli1IDB7qnH28aVaby2H+nnZY43PXXy/+H\nHrKmvDVqlNl0MbDCxvt17x4bpn59pX74IXGan38eG9eCBdbxfvvZ45ygVq6U80uWyLlRoxLHv3y5\nXP/LX+T/c8+55z+VKZTRZfqb38j/hx+OLa+//c3pV0/XjJ5+GJ2m/X64lUOy37BhieuNW5y9e6dX\nHydMmKBAqY8+Evdjj7mnoeO25+Wmm6zjb79NnNbttzvDpnMf9K9DB6f73HPdp1Bu2ZJYZrd8KKXU\n73+ffnmNHi3///EPK9wHH7j7nTjRis8yspKbKZTxKAj7rl7rzZRK7M41BxyQ3I/Ok1d5y6eM9rRk\nwVvstXzfczcS5SUI+UuVTPOaSrh83YcTT3R/zqPH+uLtMJtpPnOtk083fq8b+WeQOfCdgBWIfdd4\nxL2F+Rh8ySQNHSaZTr4QBo+0DjWXeY0Xd7I008tTVcbxR//3i2T6bD/yl2zSQzTRMqSTZ7tfL+tG\nPL/xZatKPXKPcauL8fJvf/mkcj+82NbAjk3ryPPAf8LHy5CtiTWtwudiuOqqq/jhh7ZhV+JtDTJx\nf/opdO+eWfg5c7JPP51tC9JxKwVr1yb2v3y50x0Khdi1y+mG1Jdx79qVOL2ffoqVN5VtDerVc5cv\n2bYOkyaF+P775PEffLC4v/8+cf5T2dYg+rpso+5+ff58Z/hZsxLLk6z+pOIfQKnU/Nuvu93vVNwz\nZ8KppyaPP1540a3Hv27f1iBZeaxfHwrL4bxeUxPrXxpL57YIH3+cOL/xth3Q2xpkUl72bR1mznT3\nr5S1rcFPP4FozXNHW5w6ebt911uBV8PHhyA7VurVrguRFbPRKKWUGjQoPR1bKjpDfax18tdem348\nr74q/9108mPGWMdbt1r63uj0M9EhJpJH/9q2Ta6Tv+46+T9woKUH3ntvd91hMkCp8vLE6Z17bmyY\n+vWVWrYscZpuuvB586zjxo3tcU5QK1bI+cWL5ZzWdcdD+9fjJvG2z/jsM/d7r1R8nfwZZ8h/ex3W\n14YOdfpNVSdvvx9u5ZDs9/zz8etNvDjteuVU6qPWyX/4obgff9w9DZBnz56Xm2+2jr3UyZ98svv5\nNm2c7vPOc9fJ//xzYpnd8qGUUv/3f+mXl24/nn3WCvfhh+5+7dXF2gYivmYkm578a0A3oCmwFBl0\nrcIj+665QoVTzUZdkyhev0glfe3Hq7zmU+ZEaXktVyok+5R2y4tfdSSTup5pXtOph36RTBWl75ff\n+YxHuvnKppG/xOXcCy7nNA+Ron1Xo5PPPUYnb3TyifBLJ+8lqerkLX9VuclICuRSJx/oFa+5JJtG\n3u9GwY2g9jq8wg/5iuWeZiJHMcie/sBrbtP1inTLxusVr57Zdw0ys2eH/M5C1hTKXiPJCeUs5nw1\ndEEsi3R+2hoXAAAgAElEQVRlD6IM8XBr5EXeUJ5zkhn5bOSHE7viNfD2XbN5cI1OPv00o8m0l+OH\nTj6bHnCQdPKZ4JdOPll4L+5hqj35XN6DbMhnI/8JsC7qnGf2XXNNaQaSp6qTLwT81Ml7S1Xa6UZf\nT0X3mUuCuO9LurIHVSef6mIo8VeVm4ykQDr3wG+dvGf2XXNFNrNrgkymDVKhNPLpyOdVI18s+KGT\nD0oj70audfKZUEiNvJ2EczcTXcvlQ+eFusZaFBU/jXx/mqebpp86VG9n14Rylo9E99PLOpqsLLJN\nK5Pw6TaEQdXJu8muNynUWOUcihsmX6Q7uyYVvF7x+iNi33UlsjBKr4BNa8XrsmVtw67crHj93e8y\nCx874Gpddw7cxI/PzxWvy5aJ274CUnZutNzg3YrX1aszW/HaoIG7fO4rDmdE5Jk0KUR1dfL4Dz1U\n3MlWvE6fHns9WfmtWRM/v/PmxVvxiiN/Xq94TXXFqRcrXmfMgNNPTxy/Lq9MVrzKLrOWO1F5rFsX\nCsvhvB694tXKzwxPVrza5ctmxeuMGe7+7Stepb61JZe0xTm75hGs3SbvQUwBQporXv/618Sr3tL9\n2VearVgh7j/9Kf149ApFbUjXfk1WzMlv61alBgxwTz/Zyrd05dG/li2VOvXUxOH0SrwHH7Ty0aSJ\nM1+pAko1aJA4vd/9zj2MXnEaj8mTY+OaPds6dq54tXa1/P57Offuu4njX7VKrutVqS+84J7/CRPc\n771SYtTarUx1GbiteB4yxOk33src6DTt9yOZX7dfJiteL7wwvfqow40bJ8fRhtjtfq6+2pmX226z\njmfNSpzWbbc5wya6D2ecoVStWrHnow19WyteJS797G7cmJrM0ffQvsNtquU1bpz816uvlVJq/Hh3\nv2PGWPFNm6bP52fF6/0UgH1XFU41k08yPVirfMl5bjA6+cT+S0uDqcNNh0zqa7Z1PAg6+XjEn0Lp\nDZnEFVSd/CXIgGodRBUzHI/suwZdJ5/MxqtS+a+46aZZyDp55/VQzvKRr3I0OvnckOrAq9UmhHKY\nm9TIhU5+j1vxmqteeCH07nUevcprPmVOlJbXctnjTbeBTJSXQqgjmkzzmkq4fN6HVKZQxivnXN6D\nbDCNfBKyUdcEeZ58ugUfxLnZmVGVs5jz1RgFsSz8qk/J0vVCbRe/J1+VeuQ+km7ZeD27RlMNbAR2\nIwugjkK2PBgJVGLp69e7B88dXjTyQZ1XnWtdoBdx52LFa7pppKOTD2pZp8OeqpOPtxgq1ReJ318c\n8cinTj5hPpDXYmesla3xtjyIIag6eU2yvWv8+CyPjLGnSCHr5J2EcpaPYtHJZ0Ix6ORTxXp2Qj7n\npPB08tFZjLflQV7xoicfVApJ55sufr04g17muaKY61I08WQN6j0ISiOvgI+Ar4Brw+fibXmQV3Kl\nk/e7QqTSk7d/hnqxd02y9HI1hdKZblXM57WXe9ekuyd+OgOv2h1EnXym+8mnUgbR9yHf6hq3/Ljt\nXVMs6ppc6eS7Ioa8myEqmrlR1+NO3r/qqqtYvrxt2OX9itfPP4e2bavCNye98N98k336uVrxCslX\nvK5Y4XSHQiF27HC6IfUVr7t3J05v1arMVrzutZd7fMlWHH7xRYilS5PHf9hh4l64MHH8M2c685tK\n+a1bFz++BQvirXh1l8fPFa/SyKcXP4T4+ms488zM0k9lxau9fJOVx5o1obAcqeffvuL1008T+8/F\nite5cy13vBWvNTXWilexKdwWv+kH3I409M3D51oQ2/BDeKnXY4/FXxmWyc++0mzBAnHbV9ml+tN2\nGPv2nRCzeu2dd6zjzZvzb+O1WTOlunVLHE7b7ezXz7Ir2qyZM1+pAkrVrZs4vQsvjA3TsKG14jQe\nX30VG9f06dZxtI3XxYvl/Pz5cu4//0kc/08/yXW9svqll9zz//77StWrF3vvlXKuLrbLp22/ajuh\n9vJ6/HGn31Gj5H8yG6/2++FWDsl+9lWU8epTdJzaVm2q9VHbeNWrMYcOdU8DlLrySmde7rzTOv76\n68Rp3XqrM2yi+3D22cnrKCh15plOG68PPijn16xJLLNbPpQS+dItL23PVa++VkqpUMjd7xtvWPHN\nnKnPx19cmgt1TQOgPHzcEFkU9Q3wHnBl+PyVwLs5SDspKu6tSE7Q9bPZyGaIRangl3muKIa6lGrZ\nFZqs6eY3F+qa/YB3bPGPQKxEfYX7lgd5Rd+gXM+Tz3fFibzPUyQI+8mn04jGl60q7XSj4/R7CmUQ\ndfLp1t8g7iefatyWrFUOdz6f4ULTyS9CFOnR6C0PfCWbRj46jmTn8olShb/HStDYk3vyftWlZM9R\n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\nH/jmm2846KCDHOd+/PFH1qxZw/Lly3nppZfo3bs38+bNA+DGG29k06ZNLFq0iIkTJ/Lyyy8zfPhw\nQBpI/bKbOHEi7dq1Y+LEiRF3VVUVAEOHDuW9997j448/ZsWKFVRUVPDHP/7RkYePP/6YuXPnptRI\n1q5dmyeffJI1a9YwadIkxo8fz9NPPw3Apk2bOPXUUznrrLNYsWIFCxYs4JRTTuGMM86gT58+XHzx\nxWzatInp02XvxpKSEkpKSqhbty7nn38+r732WiSdN954g6qqKpo2bcr06dO55ppr+Oc//8natWu5\n7rrr6N69Ozt27Ij479ixIzNnzky1KDyjLbAYaazty65KbO6hwGW2a88D5yOqmg9t508A/uOShjIk\nB5R64IHMwz76qLf52RMpK5N7mUtSeR7klZ3dL1PKysrUd999F3FPmDBB1a5dW23ZsiVyrmfPnmrA\ngAFq165dqk6dOmrOnDmRa88++6yqqqpSSik1bNgw1b17d6WUUh07dlTDhg1TF198sVJKqcrKSjV9\n+vTItfHjx0fiWL58uSorK1O7d+9WixYtUiUlJWrRokUZyzR48GDVo0cPpZRSr776qjriiCNc/fXr\n109dfvnljnNVVVVq2LBhSimlPvroI9WuXbvIteOOO0698sorSimlrr/+enXfffc5wh500EFq4sSJ\nEXffvn3V1VdfHZNuvDqBtdtvDOlYhnoLsQy1KbphTpSAITeY3ri/BKUn70UznykVFRVs2rQp5lz9\n+vUj7srKSlasWMGaNWvYuXMnlZWVkWtt2rRh2TKxHXTiiSfyySefsHLlSnbv3s2FF17IZ599xuLF\ni9mwYUNkh8jq6mp69OhBRUUFFRUVHHLIIdSuXduhv27d2m63KDHz5s3j7LPPpkWLFuy999707duX\nNWvWALB06VIOPPDA9G8M8mWyZcsWpkyZQnV1NTNnzoyonBYvXszjjz8ekaGiooIffviBFStWRMJv\n3LiRioqKjNKOJpUNyrRlqFewDH38CDRH1DktEEtRkKVlKICrrrqKtm3bAtC4cWM6deoU+VTTn3N+\nu/U5/9LPPny0LJnG9+67cO21VRx6qD/lMWPGDG655Za8pWd3Q4hQKHf1KegcdthhfPfdd3Tp0iVy\nbt26dWzZsoUGDRoA0qAddthhNG3alLKyMqqrq+nYsSMAS5YsoVUraRbat29PgwYNGDp0KN26daO8\n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\nz0VJIc1+2BPp0AFeeSW9MIWkrgkShZTXfOBF1Ym+pelYjTqKNAlCAxUEnXy2aQZJh5oNhSTHxo3u\n51ORIegNV5DKIdc6+UIbdPeiJ/8R8BVwbfhculaj0qJWrYzymVOC8OIxPfn8ksmDl+7c6iDp5Aup\nfuX6XnkZfz7KNdu9a7oCK4BmiIpmbtT1ZFaj0q4OtQOw204Q9NlBsvHqJ4UkR7wyKzadvN/keu+a\n0lLvFkOlgt8blK0I/18NvIOoX35ELEGtRKxGrQr7WYZsVaxpFT7nIJn5vwULwG/zYtFupfKbnpv8\nUhFSN/9XyPIHwZ3O/dbuefNS9/+//8H27eKGqrBO3htzg5m681W/Jk2qYv/9oU2bzMLnun2IZ15w\nwoQQGzbAeeelFt+gQSH69EmeX7froRyY/3OjAVAePm4IfIbMmHkEuDt8/h7EwAjIgOsMLKtRC4nV\n5yc1lyX9oTTsa+WAaPN/q1d7n8appyo1cKD7NVDqhhuc55YsSd383513emv+79xzPYkqLqtWxS93\nv8z/7b9/evUQlHr0UfdrbjJoeXUay5b5W++POCJ1839//Wt2aWX7jN9yS27N/9Wp4x7/22+nXydS\nkfXqq/0x/weia/8k3HBPBkYjUyYfBk5DplCebGvk7VajxuK0GpU2u3ZlGtJ7cqGD/Ogj6Ns3ftxB\nmiefa1avto6vu86/fGRLNp/4xVy+XuOXTv6nn/KbXqpk08gvAjqFf78EBoXPZ2I1KmVuCtuU2rQp\nk9DeYH2+Crlo5Lt3l/+pvsyKee+aUlstrahwXvNSjnTwcuA1FRn8buQLaZ58dF537pRzyfKVal2K\ndy/SnRTSs2dyP14QyBWvu3fDk09a7mXL4Lvv5Lh+ffmvH5hdu5yF99ln1gtg61bng/XJJ840Pv/c\nco8dC59+mjxvw4fHb3jX215n27ZBdbXl3rnTGU5/qGnWrnW6G4eXkMVrGLJ5kPx+CNPF3sg3a+Zf\nPrIlm/temscndf16/78UjzzSu7j0M7R1qzz3Gvvzun49jBghx9u3W+0NwKBB8Je/WG77vejXD1au\nlON0y8iel0T4PYUyJ7z7Ltxyi+W+6io4+GCnH11wZWXOm3v88XD77XLcoAEMGCDHO3fCiSfCtGni\nHjcOuna1wp11FpxwQmxeSkqcN/nqq+GBB0IOP0rJKlx7L/Omm+CAAyz3H/8IXbpY7rPPhj/9yXLv\nsw+cc05s+ql+4hfzfvJ22aLvRyHJEa8sU5Ehn41sRQW89lp6Ybwuh2zkjQ6rX1ihkMzOO+ggcVdU\nyIcrFUMAABd+SURBVEpkgNGj4fLLQwC8/rqzvenTB+67zz3+Bx8UtSqk35PP1wydQDby5eVO99at\nsX4S3SD7opM5c+S/Lui995b/ZWWx4Ro0cI8v2q/bNM41axLHNW4cfP215f7vf+G995x+Wra0jnV+\nc1ERgmgZaudO+PWv3a/ZX+L5nLqWiHzMk3dLL19fYUuXuqefCn58KT75JPTuLcfxGvkDD5T/7dtb\n19ati43L3sOH2MY7On4db7o9+T26kY++WW437+efrePom25Xi0TfyJ075b9bQx3v8ym6wW7fvsrh\nVir2RRCdZ7eXSrTaxx4mWSOvFAwbZg1K+qmT94ItW2DqVPdriRr5oMmRiGx08pp8NaDRdTPf8+TT\nrc9/+xv885+Jw+pnv6zM6jjaz+mpitFtQ3S7EB2/Ltdc9eSLUl0TfbPcGvl27azj6Irv1shrP/pa\nOo18dH62bXO6lYqNL7pg6tSJjTf6QdqwAS67zHmuUSP3PAH83/9ZFduel3zjhSpBvwTd8m8v/z59\n5LPbbzKR2YuyyVfvL9UB/1DIOdblFZMnwwMPZBY2Xk9ey1RSYnXcnI28kKyxjo5ftxumJ58GqfTk\nE12zN9bRDXeiRj66Ysd7Q3/9dSgmrBc9+dmz4dVX5djeILg9cPr69u3u59382194XupQU228ElVq\n/eDoh87tmmbUKOs4Fzr5kSNhxw7Po81KJ6+Jd683bnRXPWRKdDlEl8HmzTLB4aSToKrKKYNXkwL6\n9888Hjf0c2R/Np1f9qGY625EX9dtTLo9+VQHXqO5/XaYNSt1/4Fr5HfvhgkT5LhHD6lcn30m7o8/\nhr/+1fJbUmI9OE8/bT2Yo0fDl1/K8bvvwty58O234v7wQ/jmG2lQQdJassQZ58iR8NVXsO++cm71\najm/cKG4d+wQnbre8lgpK48vvWTlFWTEXilJU+dNfyquXy9p6DEEPXNo/XoYM8bKU1kZ3HGHzJ3X\ng8qa7dslb3qE/6efoFUrUWf9+CMsWiTXH3/cWQnnz5d8zZkjcXz/PaxYITOCli6VB/jrr6U8li2T\n+zx5snxtzJ4t91OPd+hr27aJ34ULJc2hQ8XfsmUiY61acv677yTMpEnykO23nzUjasgQKROlrEHv\nFSscIvP3v1vHH34oedTl//LLEvfEiXIfP/9cynfBAhl0X7FCZlHt2GGl/8knsHw5TJ8OixfDxRdD\n3bpyH9atgxkzRJ3000/SuC1ZYj3oGzbI19S0aVIGP/wgsp5/vtRB+8B9TY3lnjNHZJw0SfKycKHk\nYfFiq565sXu3Fcc//yl5mTABWreGJk2kXJculfq5erX0tHfvltlj338v4e66C5o2hf/8B+bNs9Kd\nNUvqDEiDOGmS5HH6dCv9MWMk/vJy+cosKxO5FixwjktNny7n99tP0hw8WO7N/PmSzqpVVj2YMUPy\nOHOmlKMdfe9KSmQSxaefSpnpOjJjhsxMk5Xwkq4OM3++yNewobiPCm+HOHmyFX+PHlK2uv4pBe+H\nJ3e//bbzpTN3Lpx5ppQ5WC/VjRvledfPl1IyyeLzzyXMunXWc3XYYVIOSsk4nR2lpP4qJeW3a5fk\n5e235frKlfI8PfGEqGonT3a2l4WCYxVY0H7HH+9NPCed5HTr1YT6d/rp6cd57rlOd2Vl6mEPPTS5\nn332kf/t2sX3c9FF/peR/Vda6n2c5eX+y2V+8qtVy/18o0b+5uvKK53uTp3ykW78haVBW0enEuTV\nYDAYDK6URP5EEzh1Td26Mmdc07KlDFrWrSvqjKeestQa+h1Wv758kpWWit/u3Z0DnfvuC/XqybHW\njTdoEKsnnzgRbrtNjvXn+PHHy//9whsmt2kDe+0VcoQrL3fOkdcLdrTev1UrZ5xHxdlFv1072Gsv\n+ezWn5ytW4uMDz9s+dODRm3axMax117ONFuHt4SzTxsTQpFB3cMPl/96/nDHjvLfrofV1371K2cY\n7RdA75N09NEyVVXnpWlTy0+jRrGD0IceKvewXj3ntTZt5BM4evD5ww/lnog6LQRI/YhGfz5rOdx0\nproO2K9deqlzTUM8tHz6HscjegGXLhuLUEyYP/5R/t93n3O5fLRuXOdBn9d1Lp5++NBDE+cV4g/2\n23XRsfc7lDReHd5t0Fo/X82aWfW7b9/YSQ726dX257dLF6td0PfbPivus8+kztwTNmH073/DaafJ\n8ZAh8v/EE0ORNPRU6/33l3iOPNJaoAhSp1u2FJn0/dLrYvQzov3re37ccU5ZdBmddJKoEXU8uj5V\nVsp/3bbY193Yad7c/bwm3438b5DtiOdjbWLmoGFD0XvqilCvnugs995b9HcVFbEDH/Xri16tTh3R\n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\ngg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7f7c499eddd0>"
       ]
      }
     ],
     "prompt_number": 39
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "output.store['fridge']"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "ename": "KeyError",
       "evalue": "'No object named fridge in the file'",
       "output_type": "pyerr",
       "traceback": [
        "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
        "\u001b[1;32m<ipython-input-41-2aad1e896a87>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0moutput\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstore\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'fridge'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
        "\u001b[1;32m/home/nipun/anaconda/lib/python2.7/site-packages/pandas/io/pytables.pyc\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m    414\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    415\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 416\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    417\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    418\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m__setitem__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;32m/home/nipun/anaconda/lib/python2.7/site-packages/pandas/io/pytables.pyc\u001b[0m in \u001b[0;36mget\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m    617\u001b[0m         \u001b[0mgroup\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_node\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    618\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mgroup\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 619\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'No object named %s in the file'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    620\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_read_group\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgroup\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    621\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
        "\u001b[1;31mKeyError\u001b[0m: 'No object named fridge in the file'"
       ]
      }
     ],
     "prompt_number": 41
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}